package com.molichuxing.services.infrastructure.service;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.service.RootService;
import com.molichuxing.services.infrastructure.dto.request.create.ViolationCreateDto;
import com.molichuxing.services.infrastructure.dto.response.CarViolationAppDto;
import com.molichuxing.services.infrastructure.dto.response.CarsViolationDto;
import com.molichuxing.services.infrastructure.dto.response.ViolationCountDto;

/**
 * @Author: renzhengyu
 * @Description: 车辆违章信息service
 * @Date: Created in 15:07 2019/9/5
 * @Modified By:
 **/
public interface CarViolationService extends RootService {

    /**
     *
     * @param map
     *  licencePlate(车牌号) vin(车架号) userId(用户id)  dealerId(经销商id)  startDate（违章开始时间） endDate（违章结束时间）
     * @param pageSize
     * @param pageNum
     * @return
     */
    Paged<CarsViolationDto> getCarsViolationPage(Map<String, Object> map, Integer pageNum, Integer pageSize);

    /**
     * 根据车辆id查询违章信息
     * @param carId
     * @return
     */
    List<CarsViolationDto> getCarsViolationByCarId(Integer carId);

    /**
     * 根据订单号查询违章信息
     * @param orderCode
     * @return
     */
    List<CarsViolationDto> getCarsViolationByOrderCode(Long orderCode);


    /**
     * 根据用户id查询违章信息
     * @param userId
     * @return
     */
    List<CarsViolationDto> getCarsViolationByUserId(Integer userId,Integer carId);


    /**
     * 违章待处理和待缴费记录的车辆id
     * @return
     */
    List<CarsViolationDto> getCarsViolationByStatus();


    /**
     * 违章待处理和待缴费记录的车辆id By vin
     * @return
     */
    List<CarsViolationDto> getCarsViolationByVin();

    /**
     * 根据用户id查询违章数量
     * @param userId
     * @return
     */
    Integer getViolationCountByUserId(Integer userId);


    /**
     * 根据用户id查询app违章列表
     * @param userId
     * @return
     */
    List<CarViolationAppDto> getCarViolationAppDtoByUserId(Integer userId);


    /**
     * 创建违章信息
     * @param violationCreateDto
     * @return
     */
    int createViolation(ViolationCreateDto violationCreateDto);

    /**
     * 修改违章信息
     * @param violationCreateDto
     * @return
     */
    int updateById(ViolationCreateDto violationCreateDto);


    /**
     * 根据用户id，违章行为，违章时间查询违章信息
     * @param userId
     * @param carId
     * @param regulationTime
     * @return
     */
    CarsViolationDto getCarsViolationDto(Integer userId,Integer carId ,LocalDateTime regulationTime);

    /**
     * 根据车辆id修改车辆违章状态
     * @param carId
     * @return
     */
    int modifyViolationStatusByCarId(Integer carId);

    /**
     * 违章统计
     * @return
     */
    public ViolationCountDto getViolationStatisticsDto();


    /**
     * 违章待处理统计
     * @return
     */
    public Integer getViolationCount();
    
    /**
     * 查询导出车辆违章数据
     * @param map
     *   ids(违章ids) licencePlate(车牌号) vin(车架号) userId(用户id)  dealerId(经销商id)  startDate（违章开始时间） endDate（违章结束时间）
     * @return
     */
    public List<CarsViolationDto> getCarsViolationDownload(Map<String, Object> map);

	/**
	 * 查询导出车辆违章数据条数
	 * 
	 * @param selectParams
	 * @return
	 */
	public Long getCarsViolationDownloadCount(Map<String, Object> selectParams);

    /**
     * 查询违章数量
     *
     * @param carId
     * @return
     */
    public Integer getViolationCountByCarId(Integer carId);
    
    /**
     *  根据id修改违章状态
     * @param id
     * @param type 1：标记已缴费 2：取消标记
     * @return
     */
    public Boolean modifyStatusAndOpTypeById(Integer id,Integer type);
}
